#ifndef _LOGIN_CONNECT_TASK_H_
#define _LOGIN_CONNECT_TASK_H_

#include "core/sharedata/login_data.h"
#include "task.h"

namespace qb {
class ThreadWrapper;

// 连接到LoginServer的任务
class CLoginConnectTask : public CTask {
 public:
  CLoginConnectTask();
  ~CLoginConnectTask();

 protected:
  // 启动连接线程连接LoginServer
  void StartConnecting();

  // 连接指定的server
  bool Connect(const tIPAdressPort& ipAddressPort);

  // 断开到server的连接
  void Disconnect();

  // 清理所有资源
  void Cleanup();

 protected:
  virtual void StartImpl();
  virtual void TerminateImpl();
  virtual bool IsConnectTask() { return true; }
  virtual void OnNetData(char* pRecvData, int nDataLen) {}
  virtual void OnNetStatus(int32_t status);
  virtual int32_t GetTaskTimeout() { return LOGIN_CONNECT_TIME; }

  // 开始一个线程, 线程回调ThreadProcess
  bool StartThread();

  // 停止线程
  void StopThread();

  // 线程回调函数
  virtual bool ThreadProcess();
  static bool ThreadCallback(void* args);

  // 处理连接返回
  void OnConnect(int32_t status);

  // 超时回调函数
  void OnTimeout();

 private:
  ThreadWrapper* m_pThread;
  unsigned int m_uThreadId;
};
}  // namespace qb

#endif
